Skip to main content

7. Apache Spark: RDD, DataFrame/DataSet

Standalone Hadoop кластер на ОС Widnows

Пререквизиты​

Установлена Java 8
Установлена переменная окружения JAVA_HOME

Используемая версия hadoop: hadoop-2.8.3
Путь к hadoop_home на файловой системе: c:\dev\hadoop

В качестве образца используется инструкция  https://github.com/MuhammadBilalYar/Hadoop-On-Window/wiki/Step-by-step-Hadoop-2.8.0-installation-on-Window-10

Инструкция​

Загрузка и подготовка дистрибутива​

  1. Загрузите дистрибутив hadoop с официального сайта  https://archive.apache.org/dist/hadoop/common/. Из папки hadoop-2.8.3 заберите hadoop-2.8.3.tar.gz
  2. Распакуйте файлы из tar.gz в директорию c:\dev\hadoop
  3. Загрузите winutils для hadoop с сайта  https://github.com/steveloughran/winutils в виде архива zip (файл winutils-master.zip)
  4. Из архива winutils-master.zip из папки winutils-master\hadoop-2.8.3\bin скопируйте все файлы с расширениями dll, exp, lib, exp, exe в папку c:\dev\hadoop\hadoop-2.8.3\bin

Конфигурация​

  1. Создайте директорию c:\dev\hadoop\data и две поддиректории c:\dev\hadoop\data\namenode и c:\dev\hadoop\data\datanode . В этих директориях кластер будет хранить данные namenode и datanode

  2. Файлы конфигурации находятся в директории c:\dev\hadoop\hadoop-2.8.3\etc\hadoop

  3. Добавьте в файл core-site.xml в тэг <configuration> (между <configuration> и </configuration>)

    	\<property\>
    \<name\>fs.defaultFS\</name\>
    \<value\>hdfs://localhost:9000\</value\>
    \</property\>
  4. Переименуйте файл mapred-site.xml.template в mapred-site.xml и добавьте в него в тэге <configuration>

       \<property\>
    \<name\>mapreduce.job.user.name\</name\>
    \<value\>%USERNAME%\</value\>
    \</property\>

    \<property\>
    \<name\>mapreduce.framework.name\</name\>
    \<value\>yarn\</value\>
    \</property\>

    \<property\>
    \<name\>yarn.apps.stagingDir\</name\>
    \<value\>/user/%USERNAME%/staging\</value\>
    \</property\>

    \<property\>
    \<name\>mapreduce.jobtracker.address\</name\>
    \<value\>local\</value\>
    \</property\>
  5. В файле yarn-site.xml в тэг <configuration> добавьте

    	\<property\>
    \<name\>yarn.nodemanager.aux-services\</name\>
    \<value\>mapreduce_shuffle\</value\>
    \</property\>
    \<property\>
    \<name\>yarn.nodemanager.auxservices.mapreduce.shuffle.class\</name\>
    \<value\>org.apache.hadoop.mapred.ShuffleHandler\</value\>
    \</property\>
  6. В файле hdfs-site.xml в секцию <configuration> добавьте replication factor и пути, где кластер будет хранить данные для namenode и datanode

    	\<property\>
    \<name\>dfs.replication\</name\>
    \<value\>1\</value\>
    \</property\>
    \<property\>
    \<name\>dfs.namenode.name.dir\</name\>
    \<value\>c:\dev\hadoop\hadoop-2.8.3\data\namenode\</value\>
    \</property\>
    \<property\>
    \<name\>dfs.datanode.data.dir\</name\>
    \<value\>c:\dev\hadoop\hadoop-2.8.3\data\datanode\</value\>
    \</property\>

Запуск и проверка​

  1. Запустите консоль (команда cmd)

  2. В консоли выполните (в принципе это нужно выполнять всякий раз, когда нужно будет работать с кластером)

    set HADOOP_HOME=c:\dev\hadoop\hadoop-2.8.3
    set HADOOP_CONF_DIR=%HADOOP_HOME%\etc\hadoop
    set PATH=%PATH%;%HADOOP_HOME%\sbin;%HADOOP_HOME%\bin


  3. Выполните форматирование namenode. Помните, что при повторном форматировании из кластера будут удалены все данные.

    hdfs.cmd namenode -format
  4. Запустите кластер

    start-all.cmd
  5. Должны запуститься без ошибок 4 демона в 4-х консолях. Имена консолей:

    1. Apache Hadoop Distiribution - hadoop namenode
    2. Apache Hadoop Distiribution - hadoop datanode
    3. Apache Hadoop Distiribution - yarn nodemanager
    4. Apache Hadoop Distiribution - yarn resourcemanager
  6. По ссылке http://localhost:8088  должен быть доступен yarn recourse manager UI

  7. По ссылке http://localhost:50070  доступен Namenode information сайт.

  8. Положите в hdfs какой-нибудь файл (для примера выбран winutils-master.zip)

    hdfs dfs -copyFromLocal winutils-master.zip /
  9. Проверьте, что файл был загружен

    hdfs dfs -ls /

Пример запуска mapreduce задачи​

Проект: wordcount.zip

Проект содержит собранный jar-файл в папке target. Однако проект можно собрать maven-ом.

Запустите консоль в корне проекта (там где лежит файл pom.xml). Выполните:

set HADOOP_HOME=<path to you hadoop>
set HADOOP_CONF_DIR=%HADOOP_HOME%\etc\hadoop
set PATH=%PATH%;%HADOOP_HOME%\sbin;%HADOOP_HOME%\bin

rem copy file to hdfs
hadoop fs -copyFromLocal spark-sql.txt /

rem check if file was copied to hdfs
hadoop fs -ls /

rem run mapreduce job on cluster
hadoop jar target\wordcount-1.0-SNAPSHOT.jar com.pva.mr.wordcount.WordCount /spark-sql.txt /out

rem copy files from hdfs
hadoop fs -copyToLocal /out

rem delete directory from hdfs
hadoop fs -rm -r /out

Логи запуска будут доступны по адресу http://localhost:8088 

Пример запуска spark задачи​

Проект: spark-1.6.3-introduction.zip

Проект содержит собранный jar-файл в папке target. Однако проект можно собрать maven-ом.

Запустите консоль в корне проекта (там где лежит файл pom.xml). Выполните:

set HADOOP_HOME=D:\Programs\hadoop_2\hadoop-2.8.3\
set HADOOP_CONF_DIR=%HADOOP_HOME%\etc\hadoop
set PATH=%PATH%;%HADOOP_HOME%\sbin;%HADOOP_HOME%\bin
set SPARK_HOME=D:\Programs\Spark\spark-1.6.3-bin-hadoop2.6\

set MAIN_CLASS=org.mai.dep810.spark.rdd.WordCount

rem start cluster command
start-all

rem stop cluster command
stop-all

rem check if file was copied to hdfs
hadoop fs -ls /

rem copy file to hdfs
hadoop fs -copyFromLocal spark-sql.txt /

rem submit spark job on cluster
%SPARK_HOME%\bin\spark-submit --class %MAIN_CLASS% --master yarn target/spark-introduction-1.0.0-SNAPSHOT.jar

Логи запуска будут доступны по адресу http://localhost:8088 

Остановка кластера​

Команда stop-all.cmd остановит кластер